<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<meta http-equiv="X-UA-Compatible" content="IE=11"/>
<meta name="generator" content="Doxygen 1.9.4"/>
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<title>Flow: flow::net_flow::Remote_endpoint Struct Reference</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript" src="dynsections.js"></script>
<link href="search/search.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="search/searchdata.js"></script>
<script type="text/javascript" src="search/search.js"></script>
<link href="doxygen.css" rel="stylesheet" type="text/css" />
</head>
<body>
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
<div id="titlearea">
<table cellspacing="0" cellpadding="0">
 <tbody>
 <tr id="projectrow">
  <td id="projectalign">
   <div id="projectname">Flow<span id="projectnumber">&#160;2.0.0</span>
   </div>
   <div id="projectbrief">Flow project: Full implementation reference.</div>
  </td>
 </tr>
 </tbody>
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.9.4 -->
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
var searchBox = new SearchBox("searchBox", "search",'Search','.html');
/* @license-end */
</script>
<script type="text/javascript" src="menudata.js"></script>
<script type="text/javascript" src="menu.js"></script>
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
$(function() {
  initMenu('',true,false,'search.php','Search');
  $(document).ready(function() { init_search(); });
});
/* @license-end */
</script>
<div id="main-nav"></div>
<!-- window showing the filter options -->
<div id="MSearchSelectWindow"
     onmouseover="return searchBox.OnSearchSelectShow()"
     onmouseout="return searchBox.OnSearchSelectHide()"
     onkeydown="return searchBox.OnSearchSelectKey(event)">
</div>

<!-- iframe showing the search results (closed by default) -->
<div id="MSearchResultsWindow">
<iframe src="javascript:void(0)" frameborder="0" 
        name="MSearchResults" id="MSearchResults">
</iframe>
</div>

<div id="nav-path" class="navpath">
  <ul>
<li class="navelem"><a class="el" href="namespaceflow.html">flow</a></li><li class="navelem"><a class="el" href="namespaceflow_1_1net__flow.html">net_flow</a></li><li class="navelem"><a class="el" href="structflow_1_1net__flow_1_1Remote__endpoint.html">Remote_endpoint</a></li>  </ul>
</div>
</div><!-- top -->
<div class="header">
  <div class="summary">
<a href="#pub-methods">Public Member Functions</a> &#124;
<a href="#pub-attribs">Public Attributes</a> &#124;
<a href="#related">Related Functions</a> &#124;
<a href="structflow_1_1net__flow_1_1Remote__endpoint-members.html">List of all members</a>  </div>
  <div class="headertitle"><div class="title">flow::net_flow::Remote_endpoint Struct Reference</div></div>
</div><!--header-->
<div class="contents">

<p>Represents the remote endpoint of a Flow-protocol connection; identifies the UDP endpoint of the remote <a class="el" href="classflow_1_1net__flow_1_1Node.html" title="An object of this class is a single Flow-protocol networking node, in the sense that: (1) it has a di...">Node</a> and the logical Flow-protocol port within that <a class="el" href="classflow_1_1net__flow_1_1Node.html" title="An object of this class is a single Flow-protocol networking node, in the sense that: (1) it has a di...">Node</a>.  
 <a href="structflow_1_1net__flow_1_1Remote__endpoint.html#details">More...</a></p>

<p><code>#include &lt;<a class="el" href="endpoint_8hpp_source.html">endpoint.hpp</a>&gt;</code></p>
<div class="dynheader">
Collaboration diagram for flow::net_flow::Remote_endpoint:</div>
<div class="dyncontent">
<div class="center"><iframe scrolling="no" frameborder="0" src="structflow_1_1net__flow_1_1Remote__endpoint__coll__graph.svg" width="218" height="131"><p><b>This browser is not able to show SVG: try Firefox, Chrome, Safari, or Opera instead.</b></p></iframe>
</div>
<center><span class="legend">[<a href="graph_legend.html">legend</a>]</span></center></div>
<table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="pub-methods" name="pub-methods"></a>
Public Member Functions</h2></td></tr>
<tr class="memitem:a575cefcce9e8b34d6ea1420d6f6756d4"><td class="memItemLeft" align="right" valign="top">size_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structflow_1_1net__flow_1_1Remote__endpoint.html#a575cefcce9e8b34d6ea1420d6f6756d4">hash</a> () const</td></tr>
<tr class="memdesc:a575cefcce9e8b34d6ea1420d6f6756d4"><td class="mdescLeft">&#160;</td><td class="mdescRight">Hash value of this <a class="el" href="structflow_1_1net__flow_1_1Remote__endpoint.html" title="Represents the remote endpoint of a Flow-protocol connection; identifies the UDP endpoint of the remo...">Remote_endpoint</a> for <code>unordered_*&lt;&gt;</code>.  <a href="structflow_1_1net__flow_1_1Remote__endpoint.html#a575cefcce9e8b34d6ea1420d6f6756d4">More...</a><br /></td></tr>
<tr class="separator:a575cefcce9e8b34d6ea1420d6f6756d4"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table><table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="pub-attribs" name="pub-attribs"></a>
Public Attributes</h2></td></tr>
<tr class="memitem:a582f3a55d828cd4e36369682315c7629"><td class="memItemLeft" align="right" valign="top"><a class="el" href="namespaceflow_1_1util.html#af1b28edb7bad743c1c77f6b982cc3196">util::Udp_endpoint</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structflow_1_1net__flow_1_1Remote__endpoint.html#a582f3a55d828cd4e36369682315c7629">m_udp_endpoint</a></td></tr>
<tr class="memdesc:a582f3a55d828cd4e36369682315c7629"><td class="mdescLeft">&#160;</td><td class="mdescRight">UDP address (IP address/UDP port) where the <a class="el" href="classflow_1_1net__flow_1_1Node.html" title="An object of this class is a single Flow-protocol networking node, in the sense that: (1) it has a di...">Node</a> identified by this endpoint bound its low-level UDP socket.  <a href="structflow_1_1net__flow_1_1Remote__endpoint.html#a582f3a55d828cd4e36369682315c7629">More...</a><br /></td></tr>
<tr class="separator:a582f3a55d828cd4e36369682315c7629"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:af96c7f45af596bde503059b4f84fc6ad"><td class="memItemLeft" align="right" valign="top"><a class="el" href="namespaceflow_1_1net__flow.html#a079d8cd87a68d1c5f04c6bce71f0061d">flow_port_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structflow_1_1net__flow_1_1Remote__endpoint.html#af96c7f45af596bde503059b4f84fc6ad">m_flow_port</a> = 0</td></tr>
<tr class="memdesc:af96c7f45af596bde503059b4f84fc6ad"><td class="mdescLeft">&#160;</td><td class="mdescRight">The logical Flow port within the <a class="el" href="classflow_1_1net__flow_1_1Node.html" title="An object of this class is a single Flow-protocol networking node, in the sense that: (1) it has a di...">Node</a> for the particular connection identified by this endpoint.  <a href="structflow_1_1net__flow_1_1Remote__endpoint.html#af96c7f45af596bde503059b4f84fc6ad">More...</a><br /></td></tr>
<tr class="separator:af96c7f45af596bde503059b4f84fc6ad"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table><table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="related" name="related"></a>
Related Functions</h2></td></tr>
<tr><td class="ititle" colspan="2"><p >(Note that these are not member functions.) </p>
</td></tr>
<tr class="memitem:a84e207ad5dc52f3832b5a5f73c75e11e"><td class="memItemLeft" align="right" valign="top">std::ostream &amp;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structflow_1_1net__flow_1_1Remote__endpoint.html#a84e207ad5dc52f3832b5a5f73c75e11e">operator&lt;&lt;</a> (std::ostream &amp;os, const <a class="el" href="structflow_1_1net__flow_1_1Remote__endpoint.html">Remote_endpoint</a> &amp;endpoint)</td></tr>
<tr class="memdesc:a84e207ad5dc52f3832b5a5f73c75e11e"><td class="mdescLeft">&#160;</td><td class="mdescRight">Prints string representation of the given <a class="el" href="structflow_1_1net__flow_1_1Remote__endpoint.html" title="Represents the remote endpoint of a Flow-protocol connection; identifies the UDP endpoint of the remo...">Remote_endpoint</a> to the given <code>ostream</code>.  <a href="structflow_1_1net__flow_1_1Remote__endpoint.html#a84e207ad5dc52f3832b5a5f73c75e11e">More...</a><br /></td></tr>
<tr class="separator:a84e207ad5dc52f3832b5a5f73c75e11e"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a8504aeca20f41a8f2b98ae04803a600e"><td class="memItemLeft" align="right" valign="top"><a class="el" href="classbool.html">bool</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structflow_1_1net__flow_1_1Remote__endpoint.html#a8504aeca20f41a8f2b98ae04803a600e">operator==</a> (const <a class="el" href="structflow_1_1net__flow_1_1Remote__endpoint.html">Remote_endpoint</a> &amp;lhs, const <a class="el" href="structflow_1_1net__flow_1_1Remote__endpoint.html">Remote_endpoint</a> &amp;rhs)</td></tr>
<tr class="memdesc:a8504aeca20f41a8f2b98ae04803a600e"><td class="mdescLeft">&#160;</td><td class="mdescRight">Whether <code>lhs</code> is equal to <code>rhs</code>.  <a href="structflow_1_1net__flow_1_1Remote__endpoint.html#a8504aeca20f41a8f2b98ae04803a600e">More...</a><br /></td></tr>
<tr class="separator:a8504aeca20f41a8f2b98ae04803a600e"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ab38246018ee64662d208371c55ffb1bd"><td class="memItemLeft" align="right" valign="top">size_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structflow_1_1net__flow_1_1Remote__endpoint.html#ab38246018ee64662d208371c55ffb1bd">hash_value</a> (const <a class="el" href="structflow_1_1net__flow_1_1Remote__endpoint.html">Remote_endpoint</a> &amp;remote_endpoint)</td></tr>
<tr class="memdesc:ab38246018ee64662d208371c55ffb1bd"><td class="mdescLeft">&#160;</td><td class="mdescRight">Free function that returns <code>remote_endpoint.hash()</code>; has to be a free function named <code>hash_value</code> for boost.hash to pick it up.  <a href="structflow_1_1net__flow_1_1Remote__endpoint.html#ab38246018ee64662d208371c55ffb1bd">More...</a><br /></td></tr>
<tr class="separator:ab38246018ee64662d208371c55ffb1bd"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table>
<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
<div class="textblock"><p >Represents the remote endpoint of a Flow-protocol connection; identifies the UDP endpoint of the remote <a class="el" href="classflow_1_1net__flow_1_1Node.html" title="An object of this class is a single Flow-protocol networking node, in the sense that: (1) it has a di...">Node</a> and the logical Flow-protocol port within that <a class="el" href="classflow_1_1net__flow_1_1Node.html" title="An object of this class is a single Flow-protocol networking node, in the sense that: (1) it has a di...">Node</a>. </p>
<p >In particular when performing <a class="el" href="classflow_1_1net__flow_1_1Node.html#a893c8393930110e2aa0823583e37cabd" title="Initiates an active connect to the specified remote Flow server.">Node::connect()</a>, one must supply a <a class="el" href="structflow_1_1net__flow_1_1Remote__endpoint.html" title="Represents the remote endpoint of a Flow-protocol connection; identifies the UDP endpoint of the remo...">Remote_endpoint</a>. Constuct this via direct member initialization.</p>
<p >When performing <a class="el" href="classflow_1_1net__flow_1_1Node.html#a3c2cd6a6c328a2d5381308258d35d95d" title="Sets up a server on the given local Flow port and returns Server_socket which can be used to accept s...">Node::listen()</a>, on the other hand, a <a class="el" href="structflow_1_1net__flow_1_1Remote__endpoint.html" title="Represents the remote endpoint of a Flow-protocol connection; identifies the UDP endpoint of the remo...">Remote_endpoint</a> is unnecessary; the UDP endpoint has already been supplied when starting the overall <a class="el" href="classflow_1_1net__flow_1_1Node.html" title="An object of this class is a single Flow-protocol networking node, in the sense that: (1) it has a di...">Node</a>, so only the Flow-protocol port number is needed by <a class="el" href="classflow_1_1net__flow_1_1Node.html#a3c2cd6a6c328a2d5381308258d35d95d" title="Sets up a server on the given local Flow port and returns Server_socket which can be used to accept s...">Node::listen()</a>.</p>
<p >Since the components of a <a class="el" href="structflow_1_1net__flow_1_1Remote__endpoint.html" title="Represents the remote endpoint of a Flow-protocol connection; identifies the UDP endpoint of the remo...">Remote_endpoint</a> should be freely readable and modifiable, I forewent the usual accessors/mutators and simply made those components public data members.</p>
<dl class="section see"><dt>See also</dt><dd>As of this writing, class <a class="el" href="classflow_1_1net__flow_1_1Node.html" title="An object of this class is a single Flow-protocol networking node, in the sense that: (1) it has a di...">Node</a> documentation header has a lengthy discussion about whether <a class="el" href="structflow_1_1net__flow_1_1Remote__endpoint.html" title="Represents the remote endpoint of a Flow-protocol connection; identifies the UDP endpoint of the remo...">Remote_endpoint</a> needs <a class="el" href="structflow_1_1net__flow_1_1Remote__endpoint.html#af96c7f45af596bde503059b4f84fc6ad" title="The logical Flow port within the Node for the particular connection identified by this endpoint.">m_flow_port</a> at all; if it does not, then <a class="el" href="structflow_1_1net__flow_1_1Remote__endpoint.html" title="Represents the remote endpoint of a Flow-protocol connection; identifies the UDP endpoint of the remo...">Remote_endpoint</a> becomes isomorphic to <a class="el" href="namespaceflow_1_1util.html#af1b28edb7bad743c1c77f6b982cc3196" title="Short-hand for the UDP endpoint (IP/port) type.">util::Udp_endpoint</a> and can be thus aliased or eliminated. See the to-dos section of that large doc header. (That discussion has implications for all of <code><a class="el" href="namespaceflow_1_1net__flow.html" title="Flow module containing the API and implementation of the Flow network protocol, a TCP-inspired stream...">net_flow</a></code>, so it belongs there, not here on this humble <code>struct</code>.)</dd></dl>
<dl class="todo"><dt><b><a class="el" href="todo.html#_todo000077">Todo:</a></b></dt><dd>The respected Scott Meyers ("Effective C++") would recommend that <a class="el" href="structflow_1_1net__flow_1_1Remote__endpoint.html#a575cefcce9e8b34d6ea1420d6f6756d4" title="Hash value of this Remote_endpoint for unordered_*&lt;&gt;.">Remote_endpoint::hash()</a> and <a class="el" href="structflow_1_1net__flow_1_1Remote__endpoint.html#a8504aeca20f41a8f2b98ae04803a600e" title="Whether lhs is equal to rhs.">Remote_endpoint::operator==()</a> be written as free functions instead of as <code>struct</code> members (see <a href="http://www.drdobbs.com/cpp/how-non-member-functions-improve-encapsu/184401197">http://www.drdobbs.com/cpp/how-non-member-functions-improve-encapsu/184401197</a>). The same would apply to a potentially great number of other non-<code>virtual</code> methods (including operators) of other <code>struct</code>s and classes that could be implemented without <code>friend</code>, so really pursuing this approach could touch quite a few things. I won't repeat Meyers' reasoning; see the link. I find the reasoning mostly compelling. To summarize his final suggestions: An operation on a type should be a free function if ALL of the following holds: it is not <code>virtual</code> by nature; AND: it is <code>&lt;&lt;</code> or <code>&gt;&gt;</code>, and/or its would-be left operand would require type conversions, and/or it can be <em>implemented</em> entirely via the type's publicly exposed interface. We already follow the advice for <code>&lt;&lt;</code> and <code>&gt;&gt;</code> (if only because we apply it to stream ops, and for that it just makes sense, <code>&lt;&lt;</code> especially, since the stream is the left-most operand there, so it <em>has</em> to be a free function in that case &ndash; and thus also for <code>&gt;&gt;</code> for consistency). The type conversion is not a common thing for this library; so that leaves non-<code>virtual</code> operations (which is most of them) that can be implemented via public APIs only (which is probaby common for <code>struct</code>s like <a class="el" href="structflow_1_1net__flow_1_1Remote__endpoint.html" title="Represents the remote endpoint of a Flow-protocol connection; identifies the UDP endpoint of the remo...">Remote_endpoint</a>, though we generally try not to have lots of <code>struct</code> methods in the first place... usually). Before rushing headlong into this project, consider a few more things, though. 1, Doxygen wouldn't pick up the relation between a non-friend free function dealing with <code>struct</code> or class <code>C</code> and <code>C</code> itself; so verbosity/error-proneness would increase by having to add a Doxygen <code>relatesalso</code> special command to each free function; otherwise documentation becomes less readable (and there's no way to enforce this by having Doxygen fail without this being done, somehow). 2, in the <code>C</code>-returning-static-member-of-<code>C</code> pattern, usually in our code it would call a private <code>C</code> constructor, meaning it would require <code>friend</code> to make it a free function, meaning it breaks Meyers' own rule and thus should be left a member. 3, Meyers tends to place very little value on brevity as its own virtue. If you find that following the above rule in some case seems to be significantly increasing code complexity/size, maybe it's best to leave it alone. (I am thinking of <a class="el" href="structflow_1_1net__flow_1_1Low__lvl__packet.html" title="Internal net_flow struct that encapsulates the Flow-protocol low-level packet structure and serves as...">Low_lvl_packet</a> and its sub-types like <a class="el" href="structflow_1_1net__flow_1_1Ack__packet.html" title="Internal net_flow struct that encapsulates the Flow-protocol low-level ACK packet.">Ack_packet</a>: they are <code>struct</code>s but not typical ones, with complex APIs; making those APIs free function when non-<code>virtual</code> sounds like a rather hairy change that "feels" like it would reduce simplicity and may increase size, at least due to all the necessary 'splaining in the comments.) All that said, this is perhaps worth pursuing (in the pursuit of stylistic perfection) &ndash; but surgically and first-do-no-harm-edly. Oh, also, constructors don't count for this and should continue to remain constructors and not some free functions stuff (should be obvious why, but just in case you get any ideas...).</dd></dl>
<dl class="todo"><dt><b><a class="el" href="todo.html#_todo000078">Todo:</a></b></dt><dd>There is a sub-case of the immediately preceding to-do that may be performed first without much controversy. That is the case where there is some member method of some type, that is then called by an extremely thin wrapper free function (not even a <code>friend</code>). In fact, <code><a class="el" href="structflow_1_1net__flow_1_1Remote__endpoint.html#ab38246018ee64662d208371c55ffb1bd" title="Free function that returns remote_endpoint.hash(); has to be a free function named hash_value for boo...">hash_value()</a></code> and <a class="el" href="structflow_1_1net__flow_1_1Remote__endpoint.html#a575cefcce9e8b34d6ea1420d6f6756d4" title="Hash value of this Remote_endpoint for unordered_*&lt;&gt;.">Remote_endpoint::hash()</a> are such a pair. Assuming one does not forget Doxygen's <code>relatesalso</code> command, it would be easy and concise to just get rid of the member and simply move its implementation directly into the free function. After all, people are meant to use the free function anyway, so why the middle-man method? In this example, <code><a class="el" href="structflow_1_1net__flow_1_1Remote__endpoint.html#ab38246018ee64662d208371c55ffb1bd" title="Free function that returns remote_endpoint.hash(); has to be a free function named hash_value for boo...">hash_value()</a></code> would directly compute the hash, and <a class="el" href="structflow_1_1net__flow_1_1Remote__endpoint.html#a575cefcce9e8b34d6ea1420d6f6756d4" title="Hash value of this Remote_endpoint for unordered_*&lt;&gt;.">Remote_endpoint::hash()</a> would not exist; but the former would include a Doxygen <code>relatesalso <a class="el" href="structflow_1_1net__flow_1_1Remote__endpoint.html" title="Represents the remote endpoint of a Flow-protocol connection; identifies the UDP endpoint of the remo...">Remote_endpoint</a></code> command to ensure properly linked generated documentation. </dd></dl>

<p class="definition">Definition at line <a class="el" href="endpoint_8hpp_source.html#l00092">92</a> of file <a class="el" href="endpoint_8hpp_source.html">endpoint.hpp</a>.</p>
</div><h2 class="groupheader">Member Function Documentation</h2>
<a id="a575cefcce9e8b34d6ea1420d6f6756d4" name="a575cefcce9e8b34d6ea1420d6f6756d4"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a575cefcce9e8b34d6ea1420d6f6756d4">&#9670;&nbsp;</a></span>hash()</h2>

<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">size_t flow::net_flow::Remote_endpoint::hash </td>
          <td>(</td>
          <td class="paramname"></td><td>)</td>
          <td> const</td>
        </tr>
      </table>
</div><div class="memdoc">

<p>Hash value of this <a class="el" href="structflow_1_1net__flow_1_1Remote__endpoint.html" title="Represents the remote endpoint of a Flow-protocol connection; identifies the UDP endpoint of the remo...">Remote_endpoint</a> for <code>unordered_*&lt;&gt;</code>. </p>
<dl class="section return"><dt>Returns</dt><dd>Ditto. </dd></dl>

<p class="definition">Definition at line <a class="el" href="endpoint_8cpp_source.html#l00024">24</a> of file <a class="el" href="endpoint_8cpp_source.html">endpoint.cpp</a>.</p>

<p class="reference">References <a class="el" href="endpoint_8hpp_source.html#l00099">m_flow_port</a>, and <a class="el" href="endpoint_8hpp_source.html#l00097">m_udp_endpoint</a>.</p>

<p class="reference">Referenced by <a class="el" href="endpoint_8cpp_source.html#l00070">hash_value()</a>.</p>
<div class="dynheader">
Here is the caller graph for this function:</div>
<div class="dyncontent">
<div class="center"><iframe scrolling="no" frameborder="0" src="structflow_1_1net__flow_1_1Remote__endpoint_a575cefcce9e8b34d6ea1420d6f6756d4_icgraph.svg" width="352" height="47"><p><b>This browser is not able to show SVG: try Firefox, Chrome, Safari, or Opera instead.</b></p></iframe>
</div>
</div>

</div>
</div>
<h2 class="groupheader">Friends And Related Function Documentation</h2>
<a id="ab38246018ee64662d208371c55ffb1bd" name="ab38246018ee64662d208371c55ffb1bd"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ab38246018ee64662d208371c55ffb1bd">&#9670;&nbsp;</a></span>hash_value()</h2>

<div class="memitem">
<div class="memproto">
<table class="mlabels">
  <tr>
  <td class="mlabels-left">
      <table class="memname">
        <tr>
          <td class="memname">size_t hash_value </td>
          <td>(</td>
          <td class="paramtype">const <a class="el" href="structflow_1_1net__flow_1_1Remote__endpoint.html">Remote_endpoint</a> &amp;&#160;</td>
          <td class="paramname"><em>remote_endpoint</em></td><td>)</td>
          <td></td>
        </tr>
      </table>
  </td>
  <td class="mlabels-right">
<span class="mlabels"><span class="mlabel">related</span></span>  </td>
  </tr>
</table>
</div><div class="memdoc">

<p>Free function that returns <code>remote_endpoint.hash()</code>; has to be a free function named <code>hash_value</code> for boost.hash to pick it up. </p>
<dl class="params"><dt>Parameters</dt><dd>
  <table class="params">
    <tr><td class="paramname">remote_endpoint</td><td>Object to hash. </td></tr>
  </table>
  </dd>
</dl>
<dl class="section return"><dt>Returns</dt><dd><code>remote_endpoint.hash()</code>. </dd></dl>

<p class="definition">Definition at line <a class="el" href="endpoint_8cpp_source.html#l00070">70</a> of file <a class="el" href="endpoint_8cpp_source.html">endpoint.cpp</a>.</p>

<p class="reference">References <a class="el" href="endpoint_8cpp_source.html#l00024">hash()</a>.</p>
<div class="dynheader">
Here is the call graph for this function:</div>
<div class="dyncontent">
<div class="center"><iframe scrolling="no" frameborder="0" src="structflow_1_1net__flow_1_1Remote__endpoint_ab38246018ee64662d208371c55ffb1bd_cgraph.svg" width="352" height="47"><p><b>This browser is not able to show SVG: try Firefox, Chrome, Safari, or Opera instead.</b></p></iframe>
</div>
</div>

</div>
</div>
<a id="a84e207ad5dc52f3832b5a5f73c75e11e" name="a84e207ad5dc52f3832b5a5f73c75e11e"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a84e207ad5dc52f3832b5a5f73c75e11e">&#9670;&nbsp;</a></span>operator&lt;&lt;()</h2>

<div class="memitem">
<div class="memproto">
<table class="mlabels">
  <tr>
  <td class="mlabels-left">
      <table class="memname">
        <tr>
          <td class="memname">std::ostream &amp; operator&lt;&lt; </td>
          <td>(</td>
          <td class="paramtype">std::ostream &amp;&#160;</td>
          <td class="paramname"><em>os</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const <a class="el" href="structflow_1_1net__flow_1_1Remote__endpoint.html">Remote_endpoint</a> &amp;&#160;</td>
          <td class="paramname"><em>endpoint</em>&#160;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td>
        </tr>
      </table>
  </td>
  <td class="mlabels-right">
<span class="mlabels"><span class="mlabel">related</span></span>  </td>
  </tr>
</table>
</div><div class="memdoc">

<p>Prints string representation of the given <a class="el" href="structflow_1_1net__flow_1_1Remote__endpoint.html" title="Represents the remote endpoint of a Flow-protocol connection; identifies the UDP endpoint of the remo...">Remote_endpoint</a> to the given <code>ostream</code>. </p>
<dl class="params"><dt>Parameters</dt><dd>
  <table class="params">
    <tr><td class="paramname">os</td><td>Stream to which to write. </td></tr>
    <tr><td class="paramname">endpoint</td><td>Endpoint to serialize. </td></tr>
  </table>
  </dd>
</dl>
<dl class="section return"><dt>Returns</dt><dd><code>os</code>. </dd></dl>

<p class="definition">Definition at line <a class="el" href="endpoint_8cpp_source.html#l00065">65</a> of file <a class="el" href="endpoint_8cpp_source.html">endpoint.cpp</a>.</p>

<p class="reference">References <a class="el" href="endpoint_8hpp_source.html#l00099">m_flow_port</a>, and <a class="el" href="endpoint_8hpp_source.html#l00097">m_udp_endpoint</a>.</p>

</div>
</div>
<a id="a8504aeca20f41a8f2b98ae04803a600e" name="a8504aeca20f41a8f2b98ae04803a600e"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a8504aeca20f41a8f2b98ae04803a600e">&#9670;&nbsp;</a></span>operator==()</h2>

<div class="memitem">
<div class="memproto">
<table class="mlabels">
  <tr>
  <td class="mlabels-left">
      <table class="memname">
        <tr>
          <td class="memname"><a class="el" href="classbool.html">bool</a> operator== </td>
          <td>(</td>
          <td class="paramtype">const <a class="el" href="structflow_1_1net__flow_1_1Remote__endpoint.html">Remote_endpoint</a> &amp;&#160;</td>
          <td class="paramname"><em>lhs</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const <a class="el" href="structflow_1_1net__flow_1_1Remote__endpoint.html">Remote_endpoint</a> &amp;&#160;</td>
          <td class="paramname"><em>rhs</em>&#160;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td>
        </tr>
      </table>
  </td>
  <td class="mlabels-right">
<span class="mlabels"><span class="mlabel">related</span></span>  </td>
  </tr>
</table>
</div><div class="memdoc">

<p>Whether <code>lhs</code> is equal to <code>rhs</code>. </p>
<dl class="params"><dt>Parameters</dt><dd>
  <table class="params">
    <tr><td class="paramname">lhs</td><td>Object to compare. </td></tr>
    <tr><td class="paramname">rhs</td><td>Object to compare. </td></tr>
  </table>
  </dd>
</dl>
<dl class="section return"><dt>Returns</dt><dd>See above. </dd></dl>

<p class="definition">Definition at line <a class="el" href="endpoint_8cpp_source.html#l00060">60</a> of file <a class="el" href="endpoint_8cpp_source.html">endpoint.cpp</a>.</p>

<p class="reference">References <a class="el" href="endpoint_8hpp_source.html#l00099">m_flow_port</a>, and <a class="el" href="endpoint_8hpp_source.html#l00097">m_udp_endpoint</a>.</p>

</div>
</div>
<h2 class="groupheader">Member Data Documentation</h2>
<a id="af96c7f45af596bde503059b4f84fc6ad" name="af96c7f45af596bde503059b4f84fc6ad"></a>
<h2 class="memtitle"><span class="permalink"><a href="#af96c7f45af596bde503059b4f84fc6ad">&#9670;&nbsp;</a></span>m_flow_port</h2>

<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname"><a class="el" href="namespaceflow_1_1net__flow.html#a079d8cd87a68d1c5f04c6bce71f0061d">flow_port_t</a> flow::net_flow::Remote_endpoint::m_flow_port = 0</td>
        </tr>
      </table>
</div><div class="memdoc">

<p>The logical Flow port within the <a class="el" href="classflow_1_1net__flow_1_1Node.html" title="An object of this class is a single Flow-protocol networking node, in the sense that: (1) it has a di...">Node</a> for the particular connection identified by this endpoint. </p>

<p class="definition">Definition at line <a class="el" href="endpoint_8hpp_source.html#l00099">99</a> of file <a class="el" href="endpoint_8hpp_source.html">endpoint.hpp</a>.</p>

<p class="reference">Referenced by <a class="el" href="endpoint_8cpp_source.html#l00024">hash()</a>, <a class="el" href="endpoint_8cpp_source.html#l00065">operator&lt;&lt;()</a>, and <a class="el" href="endpoint_8cpp_source.html#l00060">operator==()</a>.</p>

</div>
</div>
<a id="a582f3a55d828cd4e36369682315c7629" name="a582f3a55d828cd4e36369682315c7629"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a582f3a55d828cd4e36369682315c7629">&#9670;&nbsp;</a></span>m_udp_endpoint</h2>

<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname"><a class="el" href="namespaceflow_1_1util.html#af1b28edb7bad743c1c77f6b982cc3196">util::Udp_endpoint</a> flow::net_flow::Remote_endpoint::m_udp_endpoint</td>
        </tr>
      </table>
</div><div class="memdoc">

<p>UDP address (IP address/UDP port) where the <a class="el" href="classflow_1_1net__flow_1_1Node.html" title="An object of this class is a single Flow-protocol networking node, in the sense that: (1) it has a di...">Node</a> identified by this endpoint bound its low-level UDP socket. </p>

<p class="definition">Definition at line <a class="el" href="endpoint_8hpp_source.html#l00097">97</a> of file <a class="el" href="endpoint_8hpp_source.html">endpoint.hpp</a>.</p>

<p class="reference">Referenced by <a class="el" href="peer__socket_8cpp_source.html#l03957">flow::net_flow::Node::connect_worker()</a>, <a class="el" href="endpoint_8cpp_source.html#l00024">hash()</a>, <a class="el" href="endpoint_8cpp_source.html#l00065">operator&lt;&lt;()</a>, and <a class="el" href="endpoint_8cpp_source.html#l00060">operator==()</a>.</p>

</div>
</div>
<hr/>The documentation for this struct was generated from the following files:<ul>
<li>net_flow/<a class="el" href="endpoint_8hpp_source.html">endpoint.hpp</a></li>
<li>net_flow/<a class="el" href="endpoint_8cpp_source.html">endpoint.cpp</a></li>
<li>net_flow/<a class="el" href="net__flow__fwd_8hpp_source.html">net_flow_fwd.hpp</a></li>
</ul>
</div><!-- contents -->
<!-- start footer part -->
<hr class="footer"/><address class="footer"><small>
Generated on Fri Mar 28 2025 22:55:36 for Flow by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.4
</small></address>
</body>
</html>
